package com.zjsru.plan2024.oneday;

import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 3280. 将日期转换为二进制表示
 *
 * @Author: cookLee
 * @Date: 2025-01-01
 */
public class ConvertDateToBinary {

    /**
     * 主
     * \
     * 输入： date = "2080-02-29"
     * 输出： "100000100000-10-11101"
     * 解释：
     * 100000100000, 10 和 11101 分别是 2080, 02 和 29 的二进制表示。
     * \
     * 输入： date = "1900-01-01"
     * 输出： "11101101100-1-1"
     * 解释：
     * 11101101100, 1 和 1 分别是 1900, 1 和 1 的二进制表示。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        ConvertDateToBinary convertDateToBinary = new ConvertDateToBinary();
        String data = "2080-02-29";
        System.out.println(convertDateToBinary.convertDateToBinary2(data));
    }

    public String convertDateToBinary(String date) {
        return Stream.of(date.split("-")).map(v -> Integer.toBinaryString(Integer.parseInt(v))).collect(Collectors.joining("-"));
    }

    /**
     * 方法二，模拟
     *
     * @param date
     * @return {@link String}
     */
    public String convertDateToBinary2(String date) {
        int year = Integer.parseInt(date.substring(0, 4));
        int month = Integer.parseInt(date.substring(5, 7));
        int day = Integer.parseInt(date.substring(8, 10));
        return String.join("-", Integer.toBinaryString(year), Integer.toBinaryString(month), Integer.toBinaryString(day));
    }

    /**
     * 计算二进制帮手
     *
     * @param time 时间
     * @return {@link String}
     */
    private String helper(int time) {
        StringBuilder sb = new StringBuilder();
        while (time > 0) {
            sb.append(time % 2);
            time /= 2;
        }
        //结果需要从后往前倒转
        return sb.reverse().toString();
    }

}
